package 堆;

import org.junit.Test;

import java.util.PriorityQueue;

/**
 * @author aodre , QQ : 480029069
 * @date 2023/7/25 9:52
 */
public class lc2208数组和减半最小操作数 {



    /*
     贪心 + 大根堆
     直接秒！ 没啥可说的
     */
    public int solve(int []nums){
        PriorityQueue<Double> heap = new PriorityQueue<>((a,b) -> Double.compare(b,a));

        double sum = 0;
        for(int num : nums){
            sum += num;
            heap.add((double)num);
        }
        int count = 0;
        double temp = sum / 2;
        while(sum > temp){

            double poll = heap.poll() / 2;
            count++;
            sum -= poll;
            heap.add(poll);
        }
        return count;
    }



    @Test
    public void test(){
        /*
         这里有一个点 要注意以下：

         Comparator 的 lambda 方法中的 返回值 是 int ： 就三种 值  0 负数 ，正数

         返回值的类型是 int 所以 Long Double 也好都不行， 需要使用它们各自的 api  Double.comapare() Long.compare();
         */
        PriorityQueue<Long> queue = new PriorityQueue<>((a,b) -> Long.compare(b, a));
        PriorityQueue<Integer> qe = new PriorityQueue<>((a,b) -> Integer.compare(b, a)); // 建议以后使用这种规范, 不要再写 b - a  或者 a - b 这种了



    }








}
